home *** CD-ROM | disk | FTP | other *** search
/ Hacker's Arsenal - The Cutting Edge of Hacking / Hacker's Arsenal - The Cutting Edge of Hacking.iso / texts / findholes.txt < prev    next >
Internet Message Format  |  2001-07-11  |  16KB

  1. From: Manifestation
  2. Subject: Security holes manifest themselves in (broadly) four ways...
  3. Date: 11.10.93
  4.  
  5. ( Please contribute by sending E-Mail to <scott@santafe.edu> ... )
  6.  
  7. [quoting from the comp.security.unix FAQ]
  8. Security holes manifest themselves in (broadly) four ways:
  9.  
  10. 1) Physical Security Holes.
  11.  
  12. - Where the potential problem is caused by giving unauthorised persons
  13. physical access to the machine, where this might allow them to perform
  14. things that they shouldn't be able to do.
  15.  
  16. A good example of this would be a public workstation room where it would
  17. be trivial for a user to reboot a machine into single-user mode and muck
  18. around with the workstation filestore, if precautions are not taken.
  19.  
  20. Another example of this is the need to restrict access to confidential
  21. backup tapes, which may (otherwise) be read by any user with access to
  22. the tapes and a tape drive, whether they are meant to have permission or
  23. not.
  24.  
  25. 2) Software Security Holes
  26.  
  27. - Where the problem is caused by badly written items of "privledged"
  28. software (daemons, cronjobs) which can be compromised into doing things
  29. which they shouldn't oughta.
  30.  
  31. The most famous example of this is the "sendmail debug" hole (see
  32. bibliography) which would enable a cracker to bootstrap a "root" shell.
  33. This could be used to delete your filestore, create a new account, copy
  34. your password file, anything.
  35.  
  36. (Contrary to popular opinion, crack attacks via sendmail were not just
  37. restricted to the infamous "Internet Worm" - any cracker could do this
  38. by using "telnet" to port 25 on the target machine.  The story behind a
  39. similar hole (this time in the EMACS "move-mail" software) is described
  40. in [Stoll].)
  41.  
  42. New holes like this appear all the time, and your best hopes are to:
  43.  
  44.   a: try to structure your system so that as little software as possible
  45.   runs with root/daemon/bin privileges, and that which does is known to
  46.   be robust.
  47.  
  48.   b: subscribe to a mailing list which can get details of problems
  49.   and/or fixes out to you as quickly as possible, and then ACT when you
  50.   receive information.
  51.  
  52. >From: Wes Morgan <morgan@edu.uky.ms>
  53. >
  54. > c: When installing/upgrading a given system, try to install/enable only
  55. > those software packages for which you have an immediate or foreseeable
  56. > need.  Many packages include daemons or utilities which can reveal
  57. > information to outsiders.  For instance, AT&T System V Unix' accounting
  58. > package includes acctcom(1), which will (by default) allow any user to
  59. > review the daily accounting data for any other user.  Many TCP/IP packa-
  60. > ges automatically install/run programs such as rwhod, fingerd, and
  61. > <occasionally> tftpd, all of which can present security problems.
  62. >
  63. > Careful system administration is the solution.  Most of these programs
  64. > are initialized/started at boot time; you may wish to modify your boot
  65. > scripts (usually in the /etc, /etc/rc, /etc/rcX.d directories) to pre-
  66. > vent their execution.  You may wish to remove some utilities completely.
  67. > For some utilities, a simple chmod(1) can prevent access from unauthorized
  68. > users.
  69. >
  70. > In summary, DON'T TRUST INSTALLATION SCRIPTS/PROGRAMS!  Such facilities
  71. > tend to install/run everything in the package without asking you.  Most
  72. > installation documentation includes lists of "the programs included in
  73. > this package"; be sure to review it.
  74.  
  75. 3) Incompatible Usage Security Holes
  76.  
  77. - Where, through lack of experience, or no fault of his/her own, the
  78. System Manager assembles a combination of hardware and software which
  79. when used as a system is seriously flawed from a security point of view.
  80. It is the incompatibility of trying to do two unconnected but useful
  81. things which creates the security hole.
  82.  
  83. Problems like this are a pain to find once a system is set up and
  84. running, so it is better to build your system with them in mind.  It's
  85. never too late to have a rethink, though.
  86.  
  87. Some examples are detailed below; let's not go into them here, it would
  88. only spoil the surprise.
  89.  
  90. 4) Choosing a suitable security philosophy and maintaining it.
  91.  
  92. >From: Gene Spafford <spaf@cs.purdue.edu>
  93. >The fourth kind of security problem is one of perception and
  94. >understanding.  Perfect software, protected hardware, and compatible
  95. >components don't work unless you have selected an appropriate security
  96. >policy and turned on the parts of your system that enforce it.  Having
  97. >the best password mechanism in the world is worthless if your users
  98. >think that their login name backwards is a good password! Security is
  99. >relative to a policy (or set of policies) and the operation of a system
  100. >in conformance with that policy.
  101.  
  102. ---
  103.  
  104. From: Hacking
  105. Subject: Hacking Ideas
  106. Date: 11/10/93
  107.  
  108. ( Please contribute by sending E-Mail to <scott@santafe.edu> ... )
  109.  
  110. [ Many ideas taken from: HaxNet - APG V1.3 : Guide to finding new holes]
  111.  
  112. NOTE: I think this should be divided into general categories:
  113. 1) General principles
  114. 2) Looking for holes in src (most items here)
  115. 3) Looking in binary distributions
  116. 4) Looking in site specific configurations
  117.  
  118.   The following general classifications suggest themselves:
  119. 1) SUID/SGID
  120. 2) Return codes/error conditions
  121. 3) unexpected input
  122. 4) race conditions
  123. 5) authentication
  124. 6) implicit trust
  125. 7) parameters
  126. 8) permissions
  127. 9) interrupts
  128. 10) I/O
  129. 11) symbolic links
  130. 12) Daemons, particularly those taking user input.
  131. 13) Kernel race conditions
  132. 14) what else? - please add categories
  133.  
  134. (Suggested splitting of above into main and sub-catagories)
  135. I:   Suid binaries and scripts
  136.      unexpected user interactions
  137.      flawed liberary calls
  138.      implicit assumptions of external conditions (sym links, loc. paths)
  139.      race conditions
  140. II:  daemons running with priviliged uid's
  141.      race conditions
  142.      poor file protectons
  143.      implicit file protections
  144.      trust
  145.      authentication
  146. III: Kernel problems
  147.      Kernel race conditions
  148.      device driver code
  149.  
  150. The following four step method was created by System Development
  151. Corporation, who report a 65% success rate on the flaw hypotheses
  152. generated.  Doing a comprehensive search for operating system flaws
  153. requires four steps:
  154.  
  155. Step 1) Knowledge of system control structure.
  156. ===============================================
  157.   To find security holes, and identifying design weaknesses it is
  158. necessary to understand the system control structure, and layers.
  159.   One should be able to list the:
  160. A) security objects: items to be protected. ie: a users file.
  161. B) control objects: items that protect security objects. ie: a i-node
  162. C) mutual objects  : objects in both classes. ie: the password file
  163.   With such a list, it is possible to graphically represent a control
  164. hierarchy and identify potential points of attack. Making flow charts
  165. to give a visual breakdown of relationships definitely helps.
  166.   Reading the various users, operators, and administrators manuals should
  167. provide this information.
  168. (following para's should probably be moved to a "legal" section)
  169.   Reading and greping source code should also prove valuable. For those
  170. without a source licence, I would suggest we use LINUX, NET2, and BSD386
  171. distributions in order to stay legal. At some future time we may be able
  172. to form a working contract between someone or a company with legal access
  173. to other distributions and members actively participating in this project.
  174.   It appears that extracts of proprietary code may be used for academic
  175. study, so long as they are not reused in a commercial product - more
  176. checking is necessary though.
  177.  
  178. Step 2) Generate an inventory of suspected flaws. (i.e. flaw hypotheses)
  179. ========================================================================
  180. In particular we want:
  181.   Code history:
  182.     What UNIX src does a particular flavor derive from? This is important
  183. for cross references (very often only one vendor patches certain code,
  184. which may get reused, in it's unpatched reincarnation by others)
  185.   A solid cross reference:
  186.     Who checked which bug in what OS and what version prevents us from
  187. duplicating work.
  188.  
  189.   A good start would be listing all the suid binaries on the various OS
  190. flavors/versions. Then try to work out why each program is suid. i.e.:
  191.     rcp is suid root because it must use a privilaged port to do user
  192.     name authentication.
  193.   Often code that was never designed to be suid, is made suid, durring
  194. porting to solve file access problems.
  195.   We need to develope a data base that will be able to look at pairs and
  196. triplets of data, specificly: program name, suid, sgid, object accessed
  197. (why prog is suid/sgid), OS flavor/version, and flav/vers geniology.
  198.   Any sugestions on how to implement such a DB?
  199.  
  200. Step 3) Confirm hypotheses. (test and exploit flaws)
  201. ====================================================
  202.  
  203. Step 4) Make generalizations of the underlying system weaknesses, for
  204.         which the flaw represents a specific instance.
  205. =====================================================================
  206.  
  207. Tool Box:
  208. =========
  209. AGREP: I suggest everyone obtain, and install agrep from:
  210.     ftp cs.arizona.edu /agrep/agrep.tar.Z
  211.   Agrep supports "windowing" so it can look for routines, and subroutines.
  212. It also supports logical operators and is thus ideally suited to automating
  213. the search for many of the following flaws. i.e. <psudocode>
  214.       agrep WINDOW {suid() NOT taintperl()} /usr/local/*.pl
  215. or    agrep WINDOW {[suid() OR sgid()] AND [system() OR popen() OR execlp()
  216.             OR execvp()]} /usr/local/src/*.c
  217.  
  218. PERMUTATION PROGRAM: Another tool worth producing is a program to generate
  219. all possible permutations of command line flags/arguments in order to uncover
  220. undocumented features, and try to produce errors.
  221.  
  222. TCOV:
  223.  
  224. CRASH: Posted to USENET (what FTP archive?) (descrip?)
  225.  
  226. PAPERS: There are several papers that discuss methods of finding flaws, and
  227.   present test suites.
  228.   1) An Emphirical Study of the reliability of UNIX Utilities, by Barton P.
  229.     Miller, Lars Fredriksen, and Bryan So, Comm ACM, v33 n12, pp32-44,
  230.     Dec '90. Describes a test suite for testing random input strings.
  231.     Results indicated that 25% of the programs hung, crashed, or misbehaved.
  232.     In one case the OS crashed. An understanding of buffer and register
  233.     layout on the environment in question, and the expected input is likely
  234.     to produce the desired results.
  235.   2) The Mothra tools set, in Proceedings of the 22nd Hawaii International
  236.     Conference on Systems and Software, pages 275-284, Kona, HI, January '89
  237.   3) Extending Mutation Testing to Find Environmental Bugs, by Eugene H.
  238.     Spafford, Software Practice and Experience, 20(2):181-189, Feb '90
  239.   4) A paper by IBM was mentioned that was submitted to USENIX a few years
  240.     ago. (Anyone have a citation?).
  241.  
  242. Specific Flaws to Check For:
  243. ============================
  244. 1) Look for routines that don't do boundary checking, or verify input.
  245.    ie: the gets() family of routines, where it is possible to overwrite
  246.    buffer boundaries. ( sprintf()?, gets(), etc. )
  247.    also: strcpy() which is why most src has:
  248.      #define SCYPYN((a)(b)) strcpy(a, b, sizeof(a))
  249.  
  250. 2) SUID/SGID routines written in one of the shells, instead of C or
  251.    PERL.
  252.  
  253. 3) SUID/SGID routines written in PERL that don't use the "taintperl"
  254.    program.)
  255.  
  256. 4) SUID/SGID routines that use the system(), popen(), execlp(), or
  257.    execvp() calls to run something else.
  258.  
  259. 5) Any program that uses relative path names inside the program.
  260.  
  261. 6) The use of relative path names to specify dynamically linked libraries.
  262.    (look in Makefile).
  263.  
  264. 7) Routines that don't check error return codes from system calls. (ie:
  265.    fork(2), suid(2), etc), setuid() rather, as in the famous rcp bug
  266.  
  267. 8) Holes can often be found in code that:
  268.   A) is ported to a new environment.
  269.   B) receives unexpected input.
  270.   C) interacts with other local software.
  271.   D) accesses system files like passwd, L.sys, etc.
  272.   E) reads input from a publicly writable file/directory.
  273.   F) diagnostic programs which are typically not user-proofed.
  274.  
  275. 9) Test code for unexpected input. Coverage, data flow, and mutation
  276.    testing tools are available.
  277.  
  278. 10) Look in man pages, and users guides for warnings against doing X, and
  279.    try variations of X. Ditto for "bugs" section.
  280.  
  281. 11) Look for seldom used, or unusual functions or commands - read backwards.
  282.    In particular looking for undocumented flags/arguments may prove useful.
  283.    Check flags that were in prior releases, or in other OS versions. Check
  284.    for options that other programs might use. For instance telnet uses -h
  285.    option to login ...
  286.      right, as most login.c's I've seen have:
  287.           if((getuid()) && hflag){
  288.                  syslog()
  289.                  exit()
  290.                  }
  291.  
  292. 12) Look for race conditions.
  293.  
  294. 13) Failure of software to authenticate that it is really communicating
  295.    with the desired software or hardware module it wants to be accessing.
  296.  
  297. 14) Lack or error detection to reset protection mechanisms following an
  298.    error.
  299.  
  300. 15) Poor implementation resulting in, for example, condition codes being
  301.    improperly tested.
  302.  
  303. 16) Implicit trust: Routine B assumes routine A's parameters are correct
  304.    because routine A is a system process.
  305.  
  306. 17) System stores it's data or references user parameters in the users
  307.    address space.
  308.  
  309. 18) Inter process communication: return conditions (passwd OK, illegal
  310.    parameter, segment error, etc) can provide a significant wedge, esp.
  311.    when combined with (17).
  312.  
  313. 19) User parameters may not be adequately checked.
  314.  
  315. 20) Addresses that overlap or refer to system areas.
  316.  
  317. 21) Condition code checks may be omitted.
  318.  
  319. 22) Failure to anticipate unusual or extraordinary parameters.
  320.  
  321. 23) Look for system levels where the modules involved were written by
  322.    different programmers, or groups of programmers - holes are likely
  323.    to be found.
  324.  
  325. 24) Registers that point to the location of a parameters value instead
  326.    of passing the value itself.
  327.  
  328. 25) Any program running with system privileges. (too many progs are given
  329.    uid 0, to facilitate access to certain tables, etc.)
  330.  
  331. 26) Group or world readable temporary files, buffers, etc.
  332.  
  333. 27) Lack of threshold values, and lack of logging/notification once these
  334.    have been triggered.
  335.  
  336. 28) Changing parameters of critical system areas prior to their execution
  337.    by a concurrent process. (race conditions)
  338.  
  339. 29) Inadequate boundary checking at compile time, for example, a user
  340.    may be able to execute machine code disguised as data in a data area.
  341.    (if text and data areas are shared)
  342.  
  343. 30) Improperly handling user generated asynchronous interrupts. Users
  344.    interrupting a process, performing an operation, and either returning
  345.    to continue the process or begin another will frequently leave the
  346.    system in an unprotected state. Partially written files are left open,
  347.    improper writing of protection infraction messages, improper setting
  348.    of protection bits, etc often occur.
  349.  
  350. 31) Code that uses fopen(3) without setting the umask. ( eg: at(1), etc. )
  351.   In general, code that does not reset the real and effective uid before
  352.   forking.
  353.  
  354. 32) Trace is your friend (or truss in SVR4) for helping figure out what
  355.   system calls a program is using.
  356.  
  357. 33) Scan /usr/local fs's closely. Many admins will install software from
  358.   the net. Often you'll find tcpdump, top, nfswatch, ... suid'd root for
  359.   their ease of use.
  360.  
  361. 34) Check suid programs to see if they are the ones originally put on the
  362.   system. Admins will sometimes put in a passwd replacement which is less
  363.   secure than the distributed version.
  364.  
  365. 35) Look for programs that were there to install software or loadable
  366.   kernel modules.
  367.  
  368. 36) Dynamically linked programs in general. Remember LD_PRELOAD, I think
  369.   that was the variable.
  370.  
  371. 37) I/O channel programming is a prime target. Look for logical errors,
  372.   inconsistencies, and omissions.
  373.  
  374. 38) See if it's possible for a I/O channel program to modify itself, loop
  375.   back, and then execute the newly modified code. (instruction pre-load
  376.   may screw this up)
  377.  
  378. 39) If I/O channels act as independent processors they may have unlimited
  379.   access to memory, thus system code may be modified in memory prior to
  380.   execution.
  381.  
  382. 40) Look for bugs requiring flaws in multiple pieces of software, i.e. say
  383.   program a can be used to change config file /etc/a now program b assumes
  384.   the information in a to be correct and this leads to unexpected results
  385.   (just look at how many programs trust /etc/utmp)
  386.  
  387. 41) Any program, especially those suid/sgid, that allow shell escapes.
  388.  
  389.  
  390.  
  391.  
  392.  
  393.  
  394.  
  395. ... texts ...